package br.edu.ifrn.persistencia;

import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

import br.edu.ifrn.beans.Egresso;

public class EgressoDAO {
	Conexao conexao = Conexao.getInstance();
	
	public void inserirEgresso(Egresso egresso) {
		
		PreparedStatement ps= null;
		
		try {
			String query = "INSERT INTO pessoa VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)";
			
			ps= conexao.getPreparedStatement(query);
						
			/*[idPessoa] [varchar](20) NOT NULL,
			[nome] [varchar](150) NOT NULL,
			[telefone] [char](10) NOT NULL,
			[cpf] [varchar](20) NOT NULL,
			[rg] [varchar](10) NOT NULL,
			[logradouro] [varchar](150) NOT NULL,
			[numero] [varchar](5) NOT NULL,
			[bairro] [varchar](50) NOT NULL,
			[cidade] [varchar](50) NOT NULL,
			[uf] [char](2) NOT NULL,
			[complemento] [varchar](50) NULL,
			[email] [varchar](50) NOT NULL,
			[habilidades] [text] NULL,
			[nomePai] [varchar](150) NULL,
			[profissaoPai] [varchar](50) NULL,
			[nomeMae] [varchar](150) NULL,
			[profissaoMae] [varchar](50) NULL,
			[curriculo] [image] NULL,
			[egresso] [bit] NULL,*/
			
			ps.setString(1, egresso.getMatricula());
			ps.setString(2, egresso.getNome());
			ps.setString(3, egresso.getTelefone());
			ps.setString(4, egresso.getCpf());
			ps.setString(5, egresso.getRg());
			ps.setString(6, egresso.getLogradouro());
			ps.setString(7, egresso.getNumero());
			ps.setString(8, egresso.getBairro());
			ps.setString(9, egresso.getCidade());
			ps.setString(10, egresso.getUF());
			ps.setString(11, egresso.getComplemento());
			ps.setString(12, egresso.getEmail());
			ps.setString(13, egresso.getHabilidades());
			ps.setNull(14, java.sql.Types.VARCHAR);
			ps.setNull(15, java.sql.Types.VARCHAR);
			ps.setNull(16, java.sql.Types.VARCHAR);
			ps.setNull(17, java.sql.Types.VARCHAR);
			//ps.setBinaryStream(18, egresso.pegarCurriculo());
			ps.setNull(18, java.sql.Types.NULL);
			ps.setBoolean(19, true);
			ps.setString(20, egresso.getSenha());
			
			ps.executeUpdate();
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}
	
	public void deletarEgresso(Egresso egresso) {
		PreparedStatement ps= null;
		try {
			String query= "DELETE FROM pessoa WHERE idPessoa=?";
			ps= conexao.getPreparedStatement(query);
			ps.setString(1, egresso.getMatricula());
			ps.executeUpdate();
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}

	public void editarEgresso(Egresso egresso) { 
		
		PreparedStatement ps = null;
		try {

			String query = "UPDATE pessoa SET  nome=?, telefone=?, cpf=?, rg=?, logradouro=?, " +
					"numero=?, bairro=?, cidade=?, uf=?, complemento=?, email=?, habilidades=?, curriculo=? " +
					"WHERE idPessoa=?";
			ps = conexao.getPreparedStatement(query);
			
			ps.setString(1, egresso.getNome());
			ps.setString(2, egresso.getTelefone());
			ps.setString(3, egresso.getCpf());
			ps.setString(4, egresso.getRg());
			ps.setString(5, egresso.getLogradouro());
			ps.setString(6, egresso.getNumero());
			ps.setString(7, egresso.getBairro());
			ps.setString(8, egresso.getCidade());
			ps.setString(9, egresso.getUF());
			ps.setString(10, egresso.getComplemento());
			ps.setString(11, egresso.getEmail());
			ps.setString(12, egresso.getHabilidades());
		//	ps.setBinaryStream(13, egresso.pegarCurriculo());
			ps.setNull(13, java.sql.Types.NULL);
			ps.setString(14, egresso.getMatricula());
			
			ps.executeUpdate();
			
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}

	public List<Egresso> listarEgressos() { 
		List<Egresso> egressos = new ArrayList<Egresso>();
		PreparedStatement ps = null;
		try {
			String query = "SELECT * FROM pessoa where egresso = 1"; 
			ps = conexao.getPreparedStatement(query);
			ResultSet rs = ps.executeQuery();
			while (rs.next()) {
				Egresso egresso = new Egresso();
				egresso.setCpf(rs.getString("idPessoa"));
				egresso.setNome(rs.getString("nome"));
				egresso.setTelefone(rs.getString("telefone"));
				egresso.setCpf(rs.getString("cpf"));
				egresso.setRg(rs.getString("rg"));
				egresso.setLogradouro(rs.getString("logradouro"));
				egresso.setNumero(rs.getString("numero"));
				egresso.setBairro(rs.getString("bairro"));
				egresso.setCidade(rs.getString("cidade"));
				egresso.setUF(rs.getString("uf"));
				egresso.setComplemento(rs.getString("complemento"));
				egresso.setEmail(rs.getString("email"));
				egresso.setHabilidades(rs.getString("habilidades"));
			//	egresso.setCurriculo(rs.get);
				egressos.add(egresso);
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return egressos;
	}

	public List<Egresso> listarEgressosPorNome(String nome) { 
		List<Egresso> egressos = new ArrayList<Egresso>();
		PreparedStatement ps = null;
		try {
			String query = "SELECT * FROM pessoa where egresso = 1 AND nome like '%" + nome + "%'"; 
			ps = conexao.getPreparedStatement(query);
			ResultSet rs = ps.executeQuery();
			while (rs.next()) {
				Egresso egresso = new Egresso();
				egresso.setCpf(rs.getString("idPessoa"));
				egresso.setNome(rs.getString("nome"));
				egresso.setTelefone(rs.getString("telefone"));
				egresso.setCpf(rs.getString("cpf"));
				egresso.setRg(rs.getString("rg"));
				egresso.setLogradouro(rs.getString("logradouro"));
				egresso.setNumero(rs.getString("numero"));
				egresso.setBairro(rs.getString("bairro"));
				egresso.setCidade(rs.getString("cidade"));
				egresso.setUF(rs.getString("uf"));
				egresso.setComplemento(rs.getString("complemento"));
				egresso.setEmail(rs.getString("email"));
				egresso.setHabilidades(rs.getString("habilidades"));
			//	egresso.setCurriculo(rs.get);
				egressos.add(egresso);
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return egressos;
	}
	
	public Egresso recuperarPorMatricula(String matricula) { 
		PreparedStatement ps = null;
		Egresso egresso = new Egresso();
		try {
			String query = "SELECT * FROM pessoa WHERE idPessoa=?";
			ps = conexao.getPreparedStatement(query);
			ps.setString(1, matricula);
			ResultSet rs = ps.executeQuery();
			while (rs.next()) {
				egresso.setMatricula(rs.getString("idPessoa"));
				egresso.setCpf(rs.getString("idPessoa"));
				egresso.setNome(rs.getString("nome"));
				egresso.setTelefone(rs.getString("telefone"));
				egresso.setCpf(rs.getString("cpf"));
				egresso.setRg(rs.getString("rg"));
				egresso.setLogradouro(rs.getString("logradouro"));
				egresso.setNumero(rs.getString("numero"));
				egresso.setBairro(rs.getString("bairro"));
				egresso.setCidade(rs.getString("cidade"));
				egresso.setUF(rs.getString("uf"));
				egresso.setComplemento(rs.getString("complemento"));
				egresso.setEmail(rs.getString("email"));
				egresso.setHabilidades(rs.getString("habilidades"));
			//	egresso.setCurriculo(rs.getString("curriculo"));
				egresso.setSenha(rs.getString("senha"));
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return egresso;
	}
	
	public Egresso logar(String id, String senha){
		Egresso egresso = recuperarPorMatricula(id);
		if(senha.equals(egresso.getSenha()))
			return egresso;
		else
			return null;
			
	}

	public void editarSenha(Egresso egresso){
		PreparedStatement ps = null;
		try {
			String query = "UPDATE pessoa SET senha=? WHERE idPessoa=?";
			
			ps = conexao.getPreparedStatement(query);

			ps.setString(1, egresso.getSenha());
			ps.setString(2, egresso.getMatricula());
			
			ps.executeUpdate();
			
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}
}
